Agenda
Medidas de resumen para variables numéricas
Análisis descriptivo de variables categóricas
Medidas de resumen de variables categóricas con R
Gráficos de variables numéricas con R
Gráficas de variables categóricas con R
Gráfico de barras
Otros gráficos
medida de posición)tendencia central)
Para una variable de interés \(X\), se tiene la muestra conformada por \(n\) elementos \(x_1, x_2, x_3, ..., x_n\) entonces podemos resumir esta muestra de valores mediante los siguientes estadísticos:
Media aritmética: \(\bar{x}\)
Media geométrica: \(\bar{x}_g\)
Otras medias: truncada y armónica
Mediana: \(Med(x)\)
Moda: \(Moda(x)\)
Percentiles: \(P25\) y \(P75\)
Cuartiles: \(Q1\), \(Q2\) y \(Q3\)
Varianza y desviación estándar: \(Var(x)\) y \(DE(x)\)
Rango
Rango intercuartílico: \(RIQ\)
Coeficiente de variación: \(CV\)
\[\bar{x} = \frac{x_1 + x_2 + x_3 + ... + x_n}{n} = \frac{\sum_{i = 1}^{n}x_i}{n}\]
Ejemplo
Sean las siguientes edades en años: \(36, 4, 75, 45, 50\), su media aritmética es
\[\frac{36 + 4 + 75 + 45 + 50}{5} = \frac{210}{5} = 42\]
Forma de promedio útil para conjuntos de números positivos que se desean interpretar de acuerdo a su producto en vez de su suma.
Es la raíz \(n-ésima\) del producto de los números y está dada por la siguiente expresión:
\[\bar{x}_{g} = \sqrt[n]{x_1x_2x_3...x_n} = (x_1x_2x_3...x_n)^{\frac{1}{n}} = (\prod_{i = 1}^{n}x_i)^{\frac{1}{n}}\]
Ejemplo
Sean las siguientes edades en años: \(36, 4, 75, 45, 50\), su media geométrica es
\[(36 \times 4 \times 75 \times 45 \times 50) ^ {\frac{1}{5}} = \sqrt[5]{24300000} = 30\]
Media truncada
Media truncada o recortada (en inglés trimmed mean) es una medida de tendencia central similar a la media aritmética que se calcula luego de descartar las partes de ambos extremos de la distribución.
Típicamente se descartan las mismas proporcions de datos en los extremos.
En la mayoría de aplicaciones se descartan entre 5% a 25%.
En algunas regiones también la conocen como media windsoriana.
La usan mucho en eventos de competición para eliminar la influencia de las calificaciones extremas de los jueces
Media armónica
Es un tipo de medida promedio conocida por ser una de las medias pitagóricas.
Se expresa como el recíproco de las medias aritméticas de los recíprocos de un conjunto dado de observaciones.
\[H = \frac{n}{\frac{1}{x_1} + \frac{1}{x_2} + ... + \frac{1}{x_n}} = \frac{n}{\sum_{i=1}^{n}{\frac{1}{x_i}}} = (\frac{\sum_{i=1}^{n}x_i^{-1}}{n})^{-1} \] - Es más útil en situaciones donde se desea promediar tasas o estadístico similares basados en medidas de razón.
\[ Med(x) = \begin{cases} x_{(n+1)/2} & \text{si n es impar} \\ \frac{x_{(n/2)}+x_{(n/2+1)}}{2} & \text{si n es par} \end{cases} \]
Ejemplo
Luego de ordenar de menor a mayor, tenemos \(4, 36, 45, 50, 75\). Como \(n = 5\) es impar, entonces
\[Med(x) = x_{(5+1)/2} = x_{(3)} = 45\]
Es el valor que aparece más frecuentemente en los datos.
No necesariamente es única.
Unimodal
Multimodal
Multimodal extremo: Uniforme
En resumen, la visualización geométrica de la media, mediana y moda para una distribución unimodal es la siguiente.
Moda: Valor más frecuente (punta más alta de distribución)
Mediana: Valor que divide datos en 50% (mitad de la distribución)
Media: Centro de gravedad (punto en el que los “pesos” de ambos lados se igualan)
Funciones
Funciones de R base:
mean()
mean(…, trim = …)
median()
Funciones extras a R base:
Datos para los cálculos
Media aritmética
Media geométrica
Media truncada
Mediana
Son los valores que funcionana como puntos de corte para dividir el rango de datos en intervalos continuos con igual frecuencia.
El \(k-ésimo\) \(q-cuantil\) es el valor de los datos donde su función de distribución acumulada cruza \(k/q\).
Es decir, \(x\) es el \(k-ésimo\) \(q-cuantil\) para una variable \(X\) si:
\[Pr[X < x] \leq k/q\]
\[Pr[X \leq x] \geq k/q \]
El nombre del cuantil depende de cuántos grupos se forman.
La cantidad de cuantiles es siempre 1 menos.
Hay una lista bastante grande de cuantiles.
Los más famosos son:
| Q-cuantil | Nombre del cuantil | Número de grupos iguales | Número de cuantiles |
|---|---|---|---|
| 2-cuantil | Mediana | 2 | 1 |
| 3-cuantil | Terciles | 3 | 2 |
| 4-cuantil | Cuartiles | 4 | 3 |
| 5-cuantil | Quintiles | 5 | 4 |
| 6-cuantil | Sextiles | 6 | 5 |
| 7-cuantil | Septiles | 7 | 6 |
| 8-cuantil | Octiles | 8 | 7 |
| 10-cuantil | Deciles | 10 | 9 |
| 12-cuantil | Dodeciles | 12 | 11 |
| 16-cuantil | Hexadeciles | 16 | 15 |
| 20-cuantil | Ventiles | 20 | 19 |
| 100-cuantil | Percentiles | 100 | 99 |
| 1000-cuantil | Permiles o Mililes | 1000 | 999 |
Los cuartiles dividen los datos en cuatro partes iguales
Los gráficos de cajas utilizan los cuartiles para realizar el dibujo de los elementos de la caja.
Los percentiles dividen los datos en 100 partes iguales
Se usan para construir infinidad de estadísticos:
En inferencia estadística, se usan para establecer
Funciones
Funciones de R base:
Datos para los cálculos
Cuartiles
Percentiles
0% 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12%
6.00 6.05 6.10 6.15 6.20 6.25 6.30 6.35 6.40 6.45 6.50 6.55 6.60
13% 14% 15% 16% 17% 18% 19% 20% 21% 22% 23% 24% 25%
6.65 6.70 6.75 6.80 6.85 6.90 6.95 7.00 7.05 7.10 7.15 7.20 7.25
26% 27% 28% 29% 30% 31% 32% 33% 34% 35% 36% 37% 38%
7.30 7.35 7.40 7.45 7.50 7.55 7.60 7.65 7.70 7.75 7.80 7.85 7.90
39% 40% 41% 42% 43% 44% 45% 46% 47% 48% 49% 50% 51%
7.95 8.00 8.05 8.10 8.15 8.20 8.25 8.30 8.35 8.40 8.45 8.50 8.55
52% 53% 54% 55% 56% 57% 58% 59% 60% 61% 62% 63% 64%
8.60 8.65 8.70 8.75 8.80 8.85 8.90 8.95 9.00 9.05 9.10 9.15 9.20
65% 66% 67% 68% 69% 70% 71% 72% 73% 74% 75% 76% 77%
9.25 9.30 9.35 9.40 9.45 9.50 9.55 9.60 9.65 9.70 9.75 9.80 9.85
78% 79% 80% 81% 82% 83% 84% 85% 86% 87% 88% 89% 90%
9.90 9.95 10.00 10.10 10.20 10.30 10.40 10.50 10.60 10.70 10.80 10.90 11.00
91% 92% 93% 94% 95% 96% 97% 98% 99%
11.10 11.20 11.30 11.40 11.50 11.60 11.70 11.80 11.90
Medida de la cantidad de variación o dispersión de los datos.
Es la raíz cuadrada de la varianza.
Está en las mismas unidades que la variable.
Fórmula:
Sea \(\bar{x}\) la media de los \(n\) datos \(x_1, x_2, ..., x_n\), entonces la varianza está definida por:
\[Var(x) = \frac{\sum_{i = 1}^{n}{(x_i - \bar{x})^2}}{n - 1} \] Entonces, la desviación estándar de la muestra es:
\[ DE(x) = \sqrt[]{Var(x)} \]
Es el tamaño del intervalo más pequeño que contiene a todos los datos.
Diferencia entre el valor mínimo y máximo.
Fórmula
\[ Rango = min(X) - max(X) \]
Medida de la cantidad de variación de los datos.
Es la diferencia entre los percentiles 75 y 25 de los datos.
Contiene el 50% central de los datos.
El ancho de la caja de un gráfico de cajas es el IQR.
Fórmula:
\[ RIQ = Percentil~75 - Percentil~25 \]
Manualmente
Podemos almacenar los resultados en objetos
También conocido como desviación estándar relativa.
Medida estandarizada de dispersión expresada como porcentaje.
Es la razón de la desviación estandar sobre la media y mide la extensión de la variabilidad en relación a la media
\[ CV = \frac{DE(x)}{\bar{x}} \]
Manualmente
Media:
DE:
CV en %
Usando función
No función específica disponible.
Existe en funciones que generan varias variables de resumen.
Media y mediana no son dos medidas que deban entrar en disputa.
Ambas cuentan dos historias complementarias sobre el “centro” de los datos.
Ambas representan a los datos a su manera.
Piensa en lo que quieres hacer
¿Quiero describir mis datos con el “mejor representante” posible?
Recuerda el mantra: "Media es más sensible a valores extremos". La distribución de los datos puede ayudar a elegir.
Distribuciones sesgadas: La mediana y medidas de posición suelen representar mejor los datos en términos descriptivos.
Distribuciones simétricas: Mediana y media son buenas, la media se prefiere por sus propiedades estadísticas e interpretación intuitiva.
¿Quiero comparar medidas de tendencia central para inferir efectos?
La media es una buena candidata, sean las distribuciones sesgadas o no.
La mediana no es una mala candidata, sin embargo, sus propiedades estadísticas y menor teoría desarrollada limitan actualmente su uso.
¿Quiero usar una medida de resumen para establecer predicciones?
La media es una de las más usadas, sean las distribuciones sesgadas o no.
La mediana tiene teoría menos desarrollada, pero existen algunas aplicaciones.
¿Tenemos que elegir?No, no tenemos que elegir!!
En ensayos clínicos es preferible reportar ambos es más transparente y proporciona más información.
limitaciones de espacio y tablas en cuerpo del artículo, se suele reportar en anexos.hacer lo mismo en estudios observacionales.Tengo limitaciones de espacio y debo elegir una medida en la tabla principal:
Elige la opción que mejor se adecue a tu objetivo: describir, explicar, predecir.
RECUERDA: Pon en anexos las demás medidas. Es información que podría ser útil para otros fines (p. ej., para calcular tamaño de muestra, evaluar comparabilidad de poblaciones, etc.)
Si objetivo es DESCRIBIR…
Siempre reporte máximo y mínimo, preferentemente en tabla principal o texto.
Es mejor que rango, provee más información.
Si problemas de espacio, usar tabla anexa.
Media +/- Desviación estándar
simétrica y variabilidad es relativamente baja.Mediana (percentil 25 - percentil 75)
asimétrica o variabilidad es relativamente alta.percentiles 25 y 75 en vez de rango intercuartílico (más informaciónde los primeros)Hay varias opciones en R.
Las más personalizables se basan en {R base} y {dplyr} (funciones summarise()), pero requieren más código.
Usar estas si se necesitan elaborar tablas ad hoc para reportes repropducibles muy sui generis.
También son necesarias para gráficos en {ggplot2}
Las opciones que requieren poco código y son directas tienen el problema de que no son personalizables:
{summarytools}
{DescTools}
{Hmisc}
Usar estas si solo se requiere inspeccionar los datos pero no se hará ningún reporte reproducibl sui generis.
El problema con R base es que solo permite generar medidas de resumen una a la vez.
Cuando inspeccionamos datos o los describimos necesitamos hacerlo con varias variables simultáneamnente.
Podemos hacerlo con otras funciones de R.
Hay muchas opciones, veremos algunas que se sustentan en R tidy
Varios estadísticos pueden obtenerse
Varias variables pueden analizarse
bd_inmuno %>%
summarise(
`Media de edad` = mean(edad),
`DE de edad` = sd(edad),
`Mediana de edad` = median(edad),
Mediana_IgG_Final = median(IgG_Basal, na.rm = TRUE),
RIQ_IgG_Final = IQR(IgG_Basal, na.rm = TRUE)
) Media de edad DE de edad Mediana de edad Mediana_IgG_Final RIQ_IgG_Final
1 48.24561 14.70901 46 28.325 88.17
Una sola variable numérica
Todas las variables numéricas
Descriptive Statistics
bd_inmuno
N: 285
edad id IgG_Basal IgG_Final tdosis_refuerzo
----------------- -------- -------- ----------- ----------- -----------------
Mean 48.25 143.00 82.54 492.26 214.47
Std.Dev 14.71 82.42 122.33 71.15 25.28
Min 23.00 1.00 -2.19 235.51 134.00
Q1 36.00 72.00 8.13 447.18 199.00
Median 46.00 143.00 28.33 501.20 222.00
Q3 59.00 214.00 96.61 545.15 235.00
Max 97.00 285.00 583.97 618.44 267.00
MAD 17.79 105.26 36.80 70.13 22.24
IQR 23.00 142.00 88.17 97.97 36.00
CV 0.30 0.58 1.48 0.14 0.12
Skewness 0.44 0.00 2.14 -0.73 -0.87
SE.Skewness 0.14 0.14 0.14 0.14 0.14
Kurtosis -0.39 -1.21 3.92 0.44 -0.08
N.Valid 285.00 285.00 284.00 285.00 285.00
Pct.Valid 100.00 100.00 99.65 100.00 100.00
Solo algunas variables numéricas
Descriptive Statistics
bd_inmuno
N: 285
edad IgG_Basal
----------------- -------- -----------
Mean 48.25 82.54
Std.Dev 14.71 122.33
Min 23.00 -2.19
Q1 36.00 8.13
Median 46.00 28.33
Q3 59.00 96.61
Max 97.00 583.97
MAD 17.79 36.80
IQR 23.00 88.17
CV 0.30 1.48
Skewness 0.44 2.14
SE.Skewness 0.14 0.14
Kurtosis -0.39 3.92
N.Valid 285.00 284.00
Pct.Valid 100.00 99.65
Modo R base
Más información sobre el análisis de variables numéricas con…
Tablas para epi: https://epirhandbook.com/en/descriptive-tables.html
{dplyr}: https://dplyr.tidyverse.org/reference/group_by.html
{janitor}: http://sfirke.github.io/janitor/articles/tabyls.html
{summarytools}: https://htmlpreview.github.io/?https://github.com/dcomtois/summarytools/blob/master/doc/introduction.html
La media aritmética es una medida que trata de resumir los datos de una variable numérica en un solo valor.
Propiedad interesante: Es la medida que más cerca está de todos los datos.
“La edad media fue de 34 años (…)”
Ejemplo
El promedio de estas notas es 16.
Cada nota se desvía del promedio en lo siguiente:
| notas | promedio_notas | desvio_notas | desvio_promedio |
|---|---|---|---|
| 15 | 16 | -1 | 0 |
| 20 | 16 | 4 | 0 |
| 17 | 16 | 1 | 0 |
| 12 | 16 | -4 | 0 |
Mediana
“La mediana de edad fue de 35 años (…)”
“La mitad de los participantes tuvieron niveles de
hemoglobina por debajo de 10.2 mg/dl (…)“
Percentiles 25 y 75
“La mediana de edad fue de 35 años
(20 años - 54 años) (…)“
“El 25% de los participantes tuvieron menos de 20
años y el 75% menos de 54 años (…)“
Varianza
No se suele interpertar.
Debido a que está en unidades al cuadrado no se suele reportar, se prefiere a la desviación estándar.
Desviación estándar
No se suele interpretar, solo reportar.
Lo que implica que su interpretación/significado es tácito.
Es la medida de dispersión que acompaña por defecto a la media:
“La edad media (desviación estándar) fue de 35
años (23 años) (…)“
Rango
Es preferible reportar los valores mínimo y máximo.
A menudo se parafrasea:
“La edad media (desviación estándar) fue de 35
años (23 años) y varió entre 19 y 54 años (…)“
Rango intercuartílico
Es preferible reportar el percentil 25 y 75, no la diferencia: Da más información.
Se parafrasea como el ejemplo de los percentiles 25 y 75.
También se puede parafrasear de la siguiente manera:
“La mediana de edad fue de 35 años
y la mitad de los participantes tuvo
entre 20 años y 54 años (…)“
Coeficiente de variación
Cuando se reporta, no se suele interpretar (es tácito).
Sin embargo, podemos hacer una valoración ‘cualitativa’ del valor para algun interpretación.
Algunas reglas del pulgar (según INEI, Perú):
Agenda
Medidas de resumen para variables numéricas
Análisis descriptivo de variables categóricas
Medidas de resumen de variables categóricas con R
Gráficos de variables numéricas con R
Gráficas de variables categóricas con R
Gráfico de barras
Otros gráficos
¿Qué describir de los datos categóricos?
Frecuencia absoluta
Frecuencia relativa
Proporción
Porcentaje
El tamaño importa
Si n es pequeño (< 100, habitualmente)
Mejor solo reportar frecuencias absolutas.
Porcentajes pueden ser contraintuitivos.
Si n es mayor que 100
Algunos proporciones tienen nombres propios
Frecuencias relativas de eventos de interés (problemas de salud, estados de salud, enfermedades, etc.) suelen tener nombres específicas en Epidemiología Clínica y Bioestadística.
El nombre depende de cómo se construye la proporción.
Algunos diseños de estudio permiten su cálculo, otros, los vuelven imposibles.
Proporción de una población específica que está afectada por un evento de salud de interés (típicamente una enfermedad o factor de riesgo, pero también puede ser factor benéfico) en un tiempo específico.
\[Prevalencia = \frac{\text{Nº de eventos en t}}{\text{Nº de eventos + Nº sin evento en t}}\]
El tiempo específico puede ser un punto, un periodo o toda una vida.
Puede calcularse en una muestra cualquiera, pero a menudo interesan prevalencias de poblaciones relevantes.
Proporción de incidencia o incidencia acumulada es la probabilidad de que ocurra un nuevo evento particular (tal como una enfermedad) antes de un tiempo dado.
\[ \text{Incidencia Acumulada} = \frac{\text{Nº eventos nuevos durante periodo t}}{\text{Nº de individuos sin evento en risgo al inicio del periodo t}} \]
Prevalencia versus Incidencia Acumulada
| Prevalencia | Incidencia Acumulada | |
|---|---|---|
| Numerador | Eventos existentes en t | Eventos nuevos durante el periodo t |
| Denominador | Todos los individuos (con y sin eventos) en t | Individuos sin evento al inicio del periodo t |
| ¿Probabilidad de qué...? | Probabilidad de tener el evento | Probabilidad de desarrolalr evento nuevo |
| Notas | Solo requiere un punto en el tiempo. A menudo se busca poblaciones relevantes y usa muestras probabilísticas. | Requiere al menos dos puntos de tiempo. Puede estimarse en poblaciones relevantes. A menudo se usan muestras no probabilísticas en las que es factible el seguimiento (p. ej., pacientes) |
Es la razón de la probabilidad del evento entre la probabilidad del no evento.
\[Odds = \frac{Pr(evento)}{Pr(\text{no evento})} = \frac{Pr(evento)}{1 - Pr(\text{evento})}\]
Es solo una forma diferente de escribir la probabilidad del evento.
La probabilidad de ganar es 4
veces la probabilidad de perder.
| Probabilidad | Odds | Diferencia |
|---|---|---|
| 0.000 | 0.0000000 | 0.0000000 |
| 0.010 | 0.0101010 | 0.0001010 |
| 0.020 | 0.0204082 | 0.0004082 |
| 0.030 | 0.0309278 | 0.0009278 |
| 0.040 | 0.0416667 | 0.0016667 |
| 0.050 | 0.0526316 | 0.0026316 |
| 0.100 | 0.1111111 | 0.0111111 |
| 0.200 | 0.2500000 | 0.0500000 |
| 0.300 | 0.4285714 | 0.1285714 |
| 0.400 | 0.6666667 | 0.2666667 |
| 0.500 | 1.0000000 | 0.5000000 |
| 0.800 | 4.0000000 | 3.2000000 |
| 0.900 | 9.0000000 | 8.1000000 |
| 0.990 | 99.0000000 | 98.0100000 |
| 0.999 | 999.0000000 | 998.0010000 |
Los odds no se usan mucho en epidemiología para expresar frecuencias; pero una medida derivada de esta sí se usa mucho para expresar asociación: la razón de odds (OR).
En epidemiología, las proporciones o probabilidades puede ser incidencias acumuladas o prevalencias, por lo que tenemos dos tipos de Odds:
\[Odds_{Prevalente} = \frac{Prevalencia}{1 - Prevalencia}\]
\[Odds_{Incidente} = \frac{\text{Incidencia Acumulada}}{1 - \text{Incidencia Acumulada}}\]
Agenda
Medidas de resumen para variables numéricas
Análisis descriptivo de variables categóricas
Medidas de resumen de variables categóricas con R
Gráficos de variables numéricas con R
Gráficas de variables categóricas con R
Gráfico de barras
Otros gráficos
Hay varias opciones en R.
Las más personalizables se basan en {dplyr} y {janitor} (funciones summarise()), pero requieren más código.
Usar estas si se necesitan elaborar tablas ad hoc para reportes repropducibles muy sui generis.
También son necesarias para gráficos en {ggplot2}
Las opciones que requieren poco código y son directas tienen el problema de que no son personalizables:
{summarytools}
{DescTools}
Usar estas si solo se requiere inspeccionar los datos pero no se hará ningún reporte reproducibl sui generis.
La función table() y prop.table()es la más usada. Sin embargo, genera tablas “sucias” que requieren mucho código para personalizarse.
Podemos combinar la funcion group_by() con summarise() para generar una tabla de frecuencias de la variable de interés. Podemos también tomar un atajo con count
# A tibble: 3 × 2
sexo n
<fct> <int>
1 Femenino 189
2 Masculino 95
3 <NA> 1
# A tibble: 3 × 2
sexo n
<fct> <int>
1 Femenino 189
2 Masculino 95
3 <NA> 1
El paquete {janitor}, a través de su función [tabyl(){.verde-h3}], ofrece atajos y funciones pre-definidas para realizar tablas basadas en funciones de {dplyr}.
Tabla simple generada por tabyl()
sexo n percent valid_percent
Femenino 189 0.663157895 0.665493
Masculino 95 0.333333333 0.334507
<NA> 1 0.003508772 NA
Puedes “adornar” la tabla usando más funciones de {janitor}
Cambiar formato de porcentaje a %
sexo n percent
Femenino 189 0.665493
Masculino 95 0.334507
Agregar totales
sexo n percent
Femenino 189 66.5%
Masculino 95 33.5%
Total 284 -
Configurar precisión decimal
Si queremos una evaluación rápida de varias variables puede ser obtenida usando la función freq() del paquete {summarytools}
Frequencies
bd_inmuno$sexo
Label: genero
Type: Factor
Freq % Valid % Valid Cum. % Total % Total Cum.
--------------- ------ --------- -------------- --------- --------------
Femenino 189 66.55 66.55 66.32 66.32
Masculino 95 33.45 100.00 33.33 99.65
<NA> 1 0.35 100.00
Total 285 100.00 100.00 100.00 100.00
Frequencies
bd_inmuno$sexo
Label: genero
Type: Factor
Freq % Valid % Valid Cum. % Total % Total Cum.
--------------- ------ --------- -------------- --------- --------------
Femenino 189 66.55 66.55 66.32 66.32
Masculino 95 33.45 100.00 33.33 99.65
<NA> 1 0.35 100.00
Total 285 100.00 100.00 100.00 100.00
bd_inmuno$comorb
Label: comorbilidad
Type: Factor
Freq % Valid % Valid Cum. % Total % Total Cum.
----------- ------ --------- -------------- --------- --------------
No 214 75.09 75.09 75.09 75.09
Sí 71 24.91 100.00 24.91 100.00
<NA> 0 0.00 100.00
Total 285 100.00 100.00 100.00 100.00
Frequencies
bd_inmuno$sexo
Label: genero
Type: Factor
Freq % Valid % Valid Cum. % Total % Total Cum.
--------------- ------ --------- -------------- --------- --------------
Femenino 189 66.55 66.55 66.32 66.32
Masculino 95 33.45 100.00 33.33 99.65
<NA> 1 0.35 100.00
Total 285 100.00 100.00 100.00 100.00
bd_inmuno$comorb
Label: comorbilidad
Type: Factor
Freq % Valid % Valid Cum. % Total % Total Cum.
----------- ------ --------- -------------- --------- --------------
No 214 75.09 75.09 75.09 75.09
Sí 71 24.91 100.00 24.91 100.00
<NA> 0 0.00 100.00
Total 285 100.00 100.00 100.00 100.00
bd_inmuno$tipo_refuerzo
Label: tipo_refuerzo
Type: Character
Freq % Valid % Valid Cum. % Total % Total Cum.
-------------------- ------ --------- -------------- --------- --------------
(Empty string) 1 0.35 0.35 0.35 0.35
Heterologo 228 80.00 80.35 80.00 80.35
Homologo 56 19.65 100.00 19.65 100.00
<NA> 0 0.00 100.00
Total 285 100.00 100.00 100.00 100.00
bd_inmuno$ant_COV
Label: ant_COV
Type: Factor
Freq % Valid % Valid Cum. % Total % Total Cum.
--------------------- ------ --------- -------------- --------- --------------
No Infection 201 70.53 70.53 70.53 70.53
Prior Infection 84 29.47 100.00 29.47 100.00
<NA> 0 0.00 100.00
Total 285 100.00 100.00 100.00 100.00
bd_inmuno$sexo
Freq %
--------------- ------ -------
Femenino 189 66.55
Masculino 95 33.45
bd_inmuno$comorb
Freq %
-------- ------ -------
No 214 75.09
Sí 71 24.91
bd_inmuno$tipo_refuerzo
Freq %
-------------------- ------ -------
(Empty string) 1 0.35
Heterologo 228 80.00
Homologo 56 19.65
bd_inmuno$ant_COV
Freq %
--------------------- ------ -------
No Infection 201 70.53
Prior Infection 84 29.47
Más información sobre el análisis de variables categóricas con…
Tablas para epi: https://epirhandbook.com/en/descriptive-tables.html
{dplyr}: https://dplyr.tidyverse.org/reference/group_by.html
{janitor}: http://sfirke.github.io/janitor/articles/tabyls.html
{summarytools}: https://htmlpreview.github.io/?https://github.com/dcomtois/summarytools/blob/master/doc/introduction.html
Se estila reportar los resultados como números en tablas.
En el texto, se puede resaltar los resultados de una o más variables de interés.
Un ejemplo de esto sería:
bd_inmuno %>%
select(sexo, ant_COV) %>%
freq(report.nas = FALSE,
totals = FALSE,
cumul = FALSE,
headings= FALSE)bd_inmuno$sexo
Freq %
--------------- ------ -------
Femenino 189 66.55
Masculino 95 33.45
bd_inmuno$ant_COV
Freq %
--------------------- ------ -------
No Infection 201 70.53
Prior Infection 84 29.47
“El 66.6% de los participantes fueron mujeres. (…)”
“El 66.6% (189 / 284) de los participantes fueron
mujeres. (…)“
prevalencia o incidencia acumulada si el diseño lo permite. Por tanto, una interpretación tentativa para antecedente de infección por COVID-19: “La prevalencia de antecedente de infección previa por
COVID-19 fue de 29.47% (84 / 285). (…)“
Agenda
Medidas de resumen para variables numéricas
Análisis descriptivo de variables categóricas
Medidas de resumen de variables categóricas con R
Gráficos de variables numéricas con R
Gráficas de variables categóricas con R
Gráfico de barras
Otros gráficos
Permiten visualizar la distribución de la variable numérica en la muestra de datos.
Hay varios tipos de gráficos que pueden hacerse para inspeccionar la variable numérica.
Hay que distinguir dos tipos de gráficos:
Los de inspección: Deben ser rápidos de generar y leer, aunque no sean tan personalizables o elegantes. Usar funciones wrapper() de otros paquetes ayuda mucho. Usaremos {ggpubr}
Los de reporte: Deben ser elegantes y super personalizados., aunque se demoren en generarse. ¡{ggplot2} es fenomenal para estos!
Podemos crear histogramas usando la geometría
geom_histogram().
Se puede configurar el ancho de las barras (bins e inglés).
Podemos personalizar el gráfico agregando capas. Por ejemplo, podemos usar
labs()ytheme_:
Más información en el siguiente enlace:
Podemos usar densidades en vez de frecuencias absolutas o relativas en los histogramas. En variables continuas, las densidades se aproximan mejor a la idea de densidad de probabilidad
Se puede configurar el ancho de las barras (bins e inglés).
Podemos personalizar el gráfico agregando capas. Por ejemplo, podemos usar
labs()ytheme_:
Más información en el siguiente enlace:
En vez de graficar histogramas, podemos dibujar gráfico de densidades cuyas curvas están suavizadas imitando el aspecto de una distribución de probabilidad. Usamo la geometría
geom_density().
Se puede configurar el parámetro de suavización adjust
Podemos personalizar el gráfico agregando capas. Por ejemplo, podemos usar
labs()ytheme_:
Más información en el siguiente enlace:
Podemos crear gráficos de cajas usando la geometría
geom_boxplot().
Podemos personalizar el gráfico agregando capas. Por ejemplo, podemos usar
labs()ytheme_. También podemos eliminar los números y guiones del eje x usandotheme().
Anatomía:
Bordes de caja: percentil 25 (cuartil 1) y 75 (cuartil 3)
Linea horizontal dentro de caja: percentil 50 (cuartil 2 o mediana)
Rango intercuartílico (IQR): percentil 75- percentil 25
Bigotes: ± 1.5 IQR
Puntos fuera de bigotes: Outliers según regla de Tukey
Aunque se puede usar en gráficos univariados, no es un muy gráfico para estos fines.
Los “outliers” o valores extremos son solo referenciales.
Las cajas sugieren simetría de distribución, pero no permiten ver la forma directamente:
Distribución simétrica
Distribución asimétrica
Más información en el siguiente enlace:
Gráficos de violin son similares a gráficos de caja, excepto porque también muestran la densidad de probabilidad.
Podemos personalizar el gráfico agregando capas. Por ejemplo, podemos usar
labs()ytheme_. También podemos eliminar los números y guiones del eje x usandotheme().
A menudo se reportan combinado con un gráfico de cajas, puntos o ambos.
Los gráficos de violin combinados dan mucha más información, por lo que se debería preferir usar.
Contraindicación: Si se cuentan con pocos datos, los gráficos de kernel no son confiables.
Distribución simétrica
Distribución asimétrica
Más información en el siguiente enlace:
Se sugiere reportar gráficos descriptivos que sean informativos. Estos pueden obtenerse de combinar gráficos existentes. Veremos algunos ejemplos.
Sin personalizar
Sin personalizar
Sin personalizar
Agenda
Medidas de resumen para variables numéricas
Análisis descriptivo de variables categóricas
Medidas de resumen de variables categóricas con R
Gráficos de variables numéricas con R
Gráficas de variables categóricas con R
Gráfico de barras
Otros gráficos
Se pueden hacer una infinidad de estos.
El más común para investigación científica es el gráfico de barras.
Una gráfico menos usado en investigación científica, pero sí en reportes o presentaciones podría ser el gráfico de pái.
Otros gráficos interesantes:
Agenda
Medidas de resumen para variables numéricas
Análisis descriptivo de variables categóricas
Medidas de resumen de variables categóricas con R
Gráficos de variables numéricas con R
Gráficas de variables categóricas con R
Gráfico de barras
Otros gráficos
Para estos gráficos vamos a trabajar con los datos de pacientes hospitalizados durante una pandemia de Ébola. Los datos pertenecen al libro The Epidemiologist Handbook descrito en la sección del Syllabus.
Rows: 5,888
Columns: 30
$ case_id <chr> "5fe599", "8689b7", "11f8ea", "b8812a", "893f25",…
$ generation <dbl> 4, 4, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 6, 5, 6, 9, 1…
$ date_infection <date> 2014-05-08, NA, NA, 2014-05-04, 2014-05-18, 2014…
$ date_onset <date> 2014-05-13, 2014-05-13, 2014-05-16, 2014-05-18, …
$ date_hospitalisation <date> 2014-05-15, 2014-05-14, 2014-05-18, 2014-05-20, …
$ date_outcome <date> NA, 2014-05-18, 2014-05-30, NA, 2014-05-29, 2014…
$ outcome <chr> NA, "Recover", "Recover", NA, "Recover", "Recover…
$ gender <chr> "m", "f", "m", "f", "m", "f", "f", "f", "m", "f",…
$ age <dbl> 2, 3, 56, 18, 3, 16, 16, 0, 61, 27, 12, 42, 19, 7…
$ age_unit <chr> "years", "years", "years", "years", "years", "yea…
$ age_years <dbl> 2, 3, 56, 18, 3, 16, 16, 0, 61, 27, 12, 42, 19, 7…
$ age_cat <fct> 0-4, 0-4, 50-69, 15-19, 0-4, 15-19, 15-19, 0-4, 5…
$ age_cat5 <fct> 0-4, 0-4, 55-59, 15-19, 0-4, 15-19, 15-19, 0-4, 6…
$ hospital <chr> "Other", "Missing", "St. Mark's Maternity Hospita…
$ lon <dbl> -13.21574, -13.21523, -13.21291, -13.23637, -13.2…
$ lat <dbl> 8.468973, 8.451719, 8.464817, 8.475476, 8.460824,…
$ infector <chr> "f547d6", NA, NA, "f90f5f", "11f8ea", "aec8ec", "…
$ source <chr> "other", NA, NA, "other", "other", "other", "othe…
$ wt_kg <dbl> 27, 25, 91, 41, 36, 56, 47, 0, 86, 69, 67, 84, 68…
$ ht_cm <dbl> 48, 59, 238, 135, 71, 116, 87, 11, 226, 174, 112,…
$ ct_blood <dbl> 22, 22, 21, 23, 23, 21, 21, 22, 22, 22, 22, 22, 2…
$ fever <chr> "no", NA, NA, "no", "no", "no", NA, "no", "no", "…
$ chills <chr> "no", NA, NA, "no", "no", "no", NA, "no", "no", "…
$ cough <chr> "yes", NA, NA, "no", "yes", "yes", NA, "yes", "ye…
$ aches <chr> "no", NA, NA, "no", "no", "no", NA, "no", "no", "…
$ vomit <chr> "yes", NA, NA, "no", "yes", "yes", NA, "yes", "ye…
$ temp <dbl> 36.8, 36.9, 36.9, 36.8, 36.9, 37.6, 37.3, 37.0, 3…
$ time_admission <chr> NA, "09:36", "16:48", "11:22", "12:60", "14:13", …
$ bmi <dbl> 117.18750, 71.81844, 16.06525, 22.49657, 71.41440…
$ days_onset_hosp <dbl> 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 1, 0, 2, 0, 1…
hospital n percent
Central Hospital 454 0.07710598
Military Hospital 896 0.15217391
Missing 1469 0.24949049
Other 885 0.15030571
Port Hospital 1762 0.29925272
St. Mark's Maternity Hospital (SMMH) 422 0.07167120
Usamos geom_bar() cuando queremos que la altura de la barra refleje el número de filas relevantes en los datos. Por defecto, las barras son de frecuencias absolutas y se llaman count.
Usamos geom_col() cuando queremos que la altura de la barra refleje valores pre-calculados que existen en los datos. A menudo, los datos son agregads y pueden obtenerse mediante la combinación summarise() y group_by().
nivel_dolor casos prevalencia
1 Leve 234 61.9
2 Moderado 123 32.5
3 Severo 21 5.6
geom_col() y geom_bar() son equivalentes.
Si tenemos datos individuales, podemos agregarlos y así resulta más fácil pensar en los gráficos de barras desde ggplot()
Cambiar el orden de las barras arbitrariamente
Editar etiquetas y tema
Las frecuencias relativas necesitan ser calculadas para reportarse. La forma más fácil de hacerlo es agregando los datos mediante el uso de count(). Luego usamos mutate() para crear las proporciones o porcentajes. También podemos trabajar con datos individuales, pero el código puede verse un poco más duro.
Podemos usar geom_bar() con datos agregados y no agregados para obtener prorporciones. El código puede ser un poco más “extraño” con datos individuales, pero la idea es copiar/pegar y adaptar.
Orden por defecto
Orden arbitrario
Podemos querer reordenar las barras de mayor a menoro o viceversa. geom_col() y geom_bar() tiene su propia forma de hacerlo.
Podemos etiquetar los gráficos usando la función labs() y sus argumentos.
También podemos hacer que los colores cambien en base a alguna otra variable
Podemos eliminar la leyenda fácilmente con una capa adicional llamada theme(legend.position=“none”)
ebola_data %>%
count(hospital) %>%
mutate(porcentaje = n / sum(n)) %>%
ggplot(aes(x = porcentaje,
y = fct_reorder(hospital, porcentaje),
fill = hospital)) +
geom_col() +
labs(x = "Porcentaje (%)",
y = "Hospital",
title = "Distribución de hospitalizaciones de pacientes de Ébola",
fill = "Hospital") +
theme(legend.position = "none")Agenda
Medidas de resumen para variables numéricas
Análisis descriptivo de variables categóricas
Medidas de resumen de variables categóricas con R
Gráficos de variables numéricas con R
Gráficas de variables categóricas con R
Gráfico de barras
Otros gráficos
En vez de graficar varias barras de manera horizontal, las apilamos todas en una sola barra.
Grafico de barras apiladas de frecuencias absolutas
Es un gráfico de barras empaquetado como una torta o pái; por lo que el código en ggplot primero crea el gráfico de barras y luego lo convierte en torta.
Grafico de barras apiladas de frecuencias absolutas
Gráficos que parecen chupetines (“lollipop”). Son equivalentes a las barras. Pueden usarse también para describir la distribución de variables numéricas discretas y deberían preferirse a los histogramas en este caso.
ebola_data %>%
count(hospital) %>%
ggplot(aes(x = hospital, y = n)) +
geom_segment(aes(x = hospital, xend = hospital, y = 0, yend = n), color = "skyblue") +
geom_point(color = "blue", alpha = 0.6, size = 4) +
theme_light() +
coord_flip() +
theme(
panel.grid.major.y = element_blank(),
panel.border = element_blank(),
axis.ticks.y = element_blank()
)Es un gráfico básico que muestra mosaicos. El área de cada polígono refleja su frecuencia absoluta o relativa. Se debe usar el paquete {treemap}
Revisar la web “The R Graph Gallery”:
Tomemos un descanso de 5 minutos…
Estire las piernas …
Deje de ver las pantallas …
… cualquier , las del celular también.
05:00
@psotob91
https://github.com/psotob91
percys1991@gmail.comAnálisis Estadístico de Datos en Salud 2023 - Día 5